package PruebasUnitarias;

import junit.framework.TestCase;
import Modelo.*;

public class PasoTest extends TestCase {

	private Bloque[][] bloques;
	private Mapa mapa;
	
	protected void setUp() throws Exception {
		super.setUp();
		mapa= new Mapa(); 
		bloques= new Bloque[3][5];
		
		for(int i=0;i<3;i++)
			for(int j=0;j<5;j++)
				if(i<2&&j!=0&&j!=4)
					bloques[i][j]= new Vacio(mapa);
				else
					bloques[i][j]= new Tierra(mapa);
		mapa.inicializarMapa(bloques);
	}
	
	public void testEsEjecutableSobre(){
		PoseedorDeHabilidad pooglin = new Pooglin(mapa);
		Habilidad paso=new Paso();
		pooglin.asignarHabilidad(paso);
		bloques[1][1].alojar(pooglin);
		assertTrue(paso.esEjecutableSobre(pooglin));
		bloques[1][1].desalojar(pooglin);
		bloques[0][1].alojar(pooglin);
		assertFalse(paso.esEjecutableSobre(pooglin));
	}
	
	public void testEjecutarSobre(){
		PoseedorDeHabilidad pooglin = new Pooglin(mapa);
		Habilidad paso=new Paso();
		pooglin.asignarHabilidad(paso);
		bloques[1][1].alojar(pooglin);
		paso.ejecutarSobre(pooglin);
		assertTrue(pooglin.getSentido()==Constantes.derecha);
		assertTrue(mapa.getBloqueDondeEsta(pooglin)==bloques[1][2]);
		paso.ejecutarSobre(pooglin);
		assertTrue(mapa.getBloqueDondeEsta(pooglin)==bloques[1][3]);
		paso.ejecutarSobre(pooglin);
		assertTrue(mapa.getBloqueDondeEsta(pooglin)==bloques[1][3]);
		assertTrue(pooglin.getSentido()==Constantes.izquierda);
		
		// pongo hielo
		bloques[2][3]= new Hielo(mapa);
		Numeros velocidadAntes= pooglin.getVelocidad();
		paso.ejecutarSobre(pooglin);
		Numeros velocidadDespues= pooglin.getVelocidad();
		assertTrue(velocidadAntes.compareTo(velocidadDespues)<0);
		assertTrue(mapa.getBloqueDondeEsta(pooglin)==bloques[1][2]);
		
		// pongo fuego enfrente
		bloques[1][1]= new Fuego(mapa);
		paso.ejecutarSobre(pooglin);
		assertFalse(pooglin.estaVivo());
	}
}
